#include "pagedisplaystrategy.h"
#include "processingsettings.h"
#include "unifiedpagerenderer.h"
#include <QDebug>
#include <QPainter>
#include <QFont>
// =============================================================================
// PageDisplayStrategy 基础实现
// =============================================================================
QImage PageDisplayStrategy::renderPageNumber(const QImage& image,
                                           const PageRenderContext& context,
                                           const ProcessingSettings* settings)
{
    if (!settings || image.isNull()) {
        return image;
    }
    // 创建副本进行渲染
    QImage result = image.copy();
    QPainter painter(&result);
    // 从ProcessingSettings获取页码格式（只使用全局页码）
    QString pageNumber = settings->pageNumber.formatPageNumber(context.getGlobalPage(),
                                                              context.getTotalPages());
    // 简化的页码渲染（实际应该使用ProcessingSettings的完整渲染逻辑）
    painter.setPen(Qt::white);
    painter.setFont(QFont("Arial", 16));
    painter.drawText(result.rect(), Qt::AlignBottom | Qt::AlignRight, pageNumber);
    return result;
}
QImage PageDisplayStrategy::applyImageEnhancements(const QImage& image,
                                                  const ProcessingSettings* settings)
{
    if (!settings || image.isNull()) {
        return image;
    }
    // 这里应该集成ImageProcessor的增强逻辑
    // 简化实现：直接返回原图
    return image;
}
// =============================================================================
// SimpleDisplayStrategy 实现
// =============================================================================
QImage SimpleDisplayStrategy::renderPage(const QImage& image,
                                        const PageRenderContext& context,
                                        const ProcessingSettings* settings)
{
    if (image.isNull()) {
        return image;
    }
    // 简单策略：只应用图像增强，不添加页码
    return applyImageEnhancements(image, settings);
}
QSize SimpleDisplayStrategy::calculateDisplaySize(const QImage& image,
                                                 const PageRenderContext& context)
{
    if (image.isNull()) {
        return QSize();
    }
    // 简单策略：使用原始尺寸
    return image.size();
}
// =============================================================================
// PageNumberDisplayStrategy 实现
// =============================================================================
QImage PageNumberDisplayStrategy::renderPage(const QImage& image,
                                            const PageRenderContext& context,
                                            const ProcessingSettings* settings)
{
    if (image.isNull()) {
        return image;
    }
    // 先应用图像增强
    QImage enhanced = applyImageEnhancements(image, settings);
    // 再添加页码
    return renderPageNumber(enhanced, context, settings);
}
QSize PageNumberDisplayStrategy::calculateDisplaySize(const QImage& image,
                                                     const PageRenderContext& context)
{
    if (image.isNull()) {
        return QSize();
    }
    // 页码显示策略：使用原始尺寸（页码不影响显示尺寸）
    return image.size();
}
// =============================================================================
// ExportDisplayStrategy 实现
// =============================================================================
QImage ExportDisplayStrategy::renderPage(const QImage& image,
                                        const PageRenderContext& context,
                                        const ProcessingSettings* settings)
{
    if (image.isNull()) {
        return image;
    }
    // 导出策略：完整的处理流程
    // 1. 应用图像增强
    QImage enhanced = applyImageEnhancements(image, settings);
    // 2. 添加页码（使用完整的渲染逻辑）
    QImage withPageNumber = renderPageNumber(enhanced, context, settings);
    // 3. 这里可以添加其他导出特有的处理逻辑
    // 例如：水印、版权信息等
    return withPageNumber;
}
QSize ExportDisplayStrategy::calculateDisplaySize(const QImage& image,
                                                 const PageRenderContext& context)
{
    if (image.isNull()) {
        return QSize();
    }
    // 导出策略：可能需要特殊的尺寸计算
    // 简化实现：使用原始尺寸
    return image.size();
}